// map 类型----可以理解为对象类型的升级
// 创建map
let map1 = new Map([['name', 'lisi'], ['age', 10]]);
console.log('数组赋值方式创建map：', map1);

let fn1 = function() {console.log('fn1')};
let obj = {
    name: '222'
}
let map2 = new Map();
map2.set('name', 'xiaohong');
map2.set('color', 'red');
map2.set(fn1, 'www.baidu.com');
map2.set(obj, 'nihoa');
console.log('set赋值方式创建map：', map2);


// map的一些api
// map2.clear();
// map2.delete('color');
// map2.get('color');
let keys = map2.keys();
let values = map2.values();
for(const [key, value] of map2.entries()) {
    console.log('map迭代器：', key, value);
};
console.log('map的一些api', map2, map2.has(obj), keys, values, map2.size, map2.entries());
console.log([...keys], [...values], [...map2.entries()]);
map2.forEach((item, key) => console.log('map-item===>', item, key));

// 弱引用（引用计数器不会增加减少）类型weakMap --- 必须是引用类型
let weakmap1 = new WeakMap();
let hd2 = {
    name: 'hd'
};
weakmap1.set(hd2, 'world');
hd2 = null;
setTimeout(_ => {
    console.log('弱引用类型weakMap--after:', weakmap1)
}, 60000)
// weakmap1.set('ok', 'olllll'); // --- key必须是引用类型  报错
console.log(' 弱引用类型weakMap1=>', weakmap1, weakmap1.size, hd2);